const { DataTypes } = require('sequelize');
const { sequelize } = require('../library/sequelize.js');

// 投票活动模型
const voteModel = sequelize.define('ly_vote', {
    vote_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        primaryKey: true,
        autoIncrement: true,
        comment: '自增主键'
    },
    user_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '所有者ID'
    },
    title: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '活动主题'
    },
    sub_title: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '活动副标题'
    },
    keywords: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '活动关键字'
    },
    content: {
        type: DataTypes.TEXT('medium'),
        allowNull: true,
        comment: '活动内容介绍,富文本包含活动规则'
    },
    is_normal: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否正式：测试或正式数据'
    },
    is_delete: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否有效'
    },
    type: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票类型：1：文字 2：图文 3：视频 4：图文+视频 5：文件'
    },
    rules: {
        type: DataTypes.TEXT('medium'),
        allowNull: true,
        comment: '活动规则等格式'
    },
    color_style: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '默认风格:预设背景色...'
    },
    background_image: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '背景图片:待定'
    },
    header_image: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '头部图片'
    },
    list_style: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '列表风格'
    },
    page_style: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '页面风格:单页长图0，tab模式1'
    },
    auto_verify: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否自动审核:0:需要人工审核后才能在客户端显示，并参与活动 1:开启自动审核后报名作品可以直接参赛。'
    },
    is_prefix: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否开启预设报名，开启后只有名单中的人员才能报名'
    },
    is_seed: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否开启种子选手，开启后种子选手会自动加票'
    },
    is_seed_sort: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '种子选手排序'
    },
    is_vote_start: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否开启投票:手动开关，优选于时间开关'
    },
    vote_start_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票开始时间'
    },
    vote_end_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票结束时间'
    },
    is_apply_start: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否开启报名:手动开关，优选于时间开关'
    },
    apply_start_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '报名开始时间'
    },
    apply_end_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '报名结束时间'
    },
    total_count: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '总共投票数0表示不限制'
    },
    day_count: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '每天投票数0表示不限制'
    },
    total_extra_count: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '通过广告获取的最大额外投票数'
    },
    day_extra_count: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '通过广告获取的最大额外投票数'
    },
    create_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '创建'
    },
    update_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '更新'
    }
}, {
    tableName: 'ly_vote',
    timestamps: false,
    comment: '投票活动表'
});

// 获取创建时的默认值
function getCreateDefaults() {
    const currentTime = Math.floor(Date.now() / 1000);
    return {
        create_time: currentTime,
        update_time: currentTime
    };
}

// 获取更新时的默认值
function getUpdateDefaults() {
    return {
        update_time: Math.floor(Date.now() / 1000)
    };
}

// 初始化模型
async function initModel() {
    try {
        // 先测试连接
        await sequelize.authenticate();

        // 测试模型定义是否正确
        console.log('🔍 投票模型字段数量:', Object.keys(voteModel.rawAttributes).length);

        // 同步模型
        await voteModel.sync({ alter: false }); // 不自动修改表结构

        console.log('✅ 投票模型初始化成功');
        return true;
    } catch (error) {
        console.error('❌ 投票模型初始化失败:', error.message);
        console.error('错误详情:', error);
        return false;
    }
}

module.exports = {
    voteModel,
    getCreateDefaults,
    getUpdateDefaults,
    initModel
};